<template>
  <div>
    <el-select
      v-model="selectedLevels"
      :multiple="multiple"
      placeholder="请选择等级"
      :style="{ 'width': width }"
      clearable
      @change="handleChange"
    >
      <el-option
        v-for="item in level"
        :key="item.id"
        :label="item.name"
        :value="item.id"
      />
    </el-select>
  </div>
</template>

<script>
/**
 * 业务组件 - 会员等级选择器
 */
export default {
  name: 'Level',
  props: {
    /** 数据源 */
    value: {
      type: [String, Array],
      default: ''
    },
    /** 宽度 */
    width: {
      type: String,
      default: '120px'
    },
    /** 是否多选 */
    multiple: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      api: this.$u.api.MemberData,
      // 等级列表
      level: [],
      selectedLevels: this.value
    }
  },
  watch: {
    // 监听数据
    value: {
      immediate: true,
      handler(val) {
        if (val !== null) {
          this.selectedLevels = this.multiple ? (val ? val.split(',') : []) : val
        } else {
          // 处理不符合预期的情况，如 null 或非字符串/数组类型
          this.selectedLevels = this.multiple ? [] : ''
        }
      }
    }
  },
  created() {
    // 初始化数据
    this.initData()
  },
  methods: {
    // 初始化数据
    initData() {
      this.api.level().then(res => {
        this.level = res.data
      })
    },
    handleChange(value) {
      this.selectedLevels = value
      this.$emit('input', this.multiple ? value.join(',') : value)
      this.$emit('change', this.multiple ? value.join(',') : value)
    }
  }
}
</script>

<style lang="scss" scoped>
::v-deep{
  .el-input{
    width: 100% !important;
  }
}
</style>
